#include "EpocEvent.h"

using namespace EPOC;

EpocEvent::EpocEvent(void)
{
}


EpocEvent::~EpocEvent(void)
{
}

void EpocEvent::OnEvent(SDL_Event* Event) 
{
	switch(Event->type) 
	{
	
	case SDL_KEYDOWN:
		{
			OnKeyDown(Event->key.keysym);
			break;
		}

	case SDL_KEYUP:
		{
			OnKeyUp(Event->key.keysym);
			break;
		}

	case SDL_MOUSEMOTION: 
		{
			OnMouseMove(Event->motion.x,Event->motion.y,Event->motion.xrel,Event->motion.yrel,(Event->motion.state&SDL_BUTTON(SDL_BUTTON_LEFT))!=0,(Event->motion.state&SDL_BUTTON(SDL_BUTTON_RIGHT))!=0,(Event->motion.state&SDL_BUTTON(SDL_BUTTON_MIDDLE))!=0);
			break;
		}

	case SDL_MOUSEBUTTONDOWN: 
		{
			switch(Event->button.button) 
			{
			case SDL_BUTTON_LEFT: 
				{
					OnLButtonDown(Event->button.x,Event->button.y);
					break;
				}
			case SDL_BUTTON_RIGHT: 
				{
					OnRButtonDown(Event->button.x,Event->button.y);
					break;
				}
			case SDL_BUTTON_MIDDLE: 
				{
					OnMButtonDown(Event->button.x,Event->button.y);
					break;
				}
			}
			break;
		}

	case SDL_MOUSEBUTTONUP:    
		{
			switch(Event->button.button) 
			{
			case SDL_BUTTON_LEFT: 
				{
					OnLButtonUp(Event->button.x,Event->button.y);
					break;
				}
			case SDL_BUTTON_RIGHT: 
				{
					OnRButtonUp(Event->button.x,Event->button.y);
					break;
				}
			case SDL_BUTTON_MIDDLE: 
				{
					OnMButtonUp(Event->button.x,Event->button.y);
					break;
				}
			}
			break;
		}

	case SDL_JOYAXISMOTION: 
		{
			OnJoyAxis(Event->jaxis.which,Event->jaxis.axis,Event->jaxis.value);
			break;
		}

	case SDL_JOYBALLMOTION: 
		{
			OnJoyBall(Event->jball.which,Event->jball.ball,Event->jball.xrel,Event->jball.yrel);
			break;
		}

	case SDL_JOYHATMOTION: 
		{
			OnJoyHat(Event->jhat.which,Event->jhat.hat,Event->jhat.value);
			break;
		}
	case SDL_JOYBUTTONDOWN: 
		{
			OnJoyButtonDown(Event->jbutton.which,Event->jbutton.button);
			break;
		}

	case SDL_JOYBUTTONUP: 
		{
		OnJoyButtonUp(Event->jbutton.which,Event->jbutton.button);
		break;
		}

	case SDL_QUIT: 
		{
		OnExit();
		break;
		
		}

	case SDL_SYSWMEVENT: 
		{
		//Ignore
		break;
		
		}

	/*case SDL_VIDEORESIZE: {
		OnResize(Event->resize.w,Event->resize.h);
		break;
						  }

	case SDL_VIDEOEXPOSE: {
		OnExpose();
		break;
						  }*/

	default: 
		{
		OnUser(Event->user.type,Event->user.code,Event->user.data1,Event->user.data2);
		break;
		}
	}
}

void EpocEvent::OnInputFocus() 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnInputBlur()
{
	//Pure virtual, do nothing
}

void EpocEvent::OnKeyDown(SDL_Keysym sym) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnKeyUp(SDL_Keysym sym) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMouseFocus() 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMouseBlur() 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMouseMove(int mX, int mY, int relX, int relY, bool Left,bool Right,bool Middle) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMouseWheel(bool Up, bool Down) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnLButtonDown(int mX, int mY) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnLButtonUp(int mX, int mY) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnRButtonDown(int mX, int mY) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnRButtonUp(int mX, int mY) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMButtonDown(int mX, int mY) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMButtonUp(int mX, int mY) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnJoyAxis(Uint8 which,Uint8 axis,Sint16 value) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnJoyButtonDown(Uint8 which,Uint8 button) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnJoyButtonUp(Uint8 which,Uint8 button) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnJoyHat(Uint8 which,Uint8 hat,Uint8 value) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnJoyBall(Uint8 which,Uint8 ball,Sint16 xrel,Sint16 yrel) 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnMinimize()
{
	//Pure virtual, do nothing
}

void EpocEvent::OnRestore() {
	//Pure virtual, do nothing
}

void EpocEvent::OnResize(int w,int h)
{
	//Pure virtual, do nothing
}

void EpocEvent::OnExpose() 
{
	//Pure virtual, do nothing
}

void EpocEvent::OnExit()
{
	//Pure virtual, do nothing
}

void EpocEvent::OnUser(Uint8 type, int code, void* data1, void* data2) 
{
	//Pure virtual, do nothing
}